import axios from 'axios'
import envFuncs from '@/config/base'
let env = envFuncs.getParams()
import { U, getRequestId } from '../../lib/backend'
import Q from 'q'

export default {
  // 该接口用于查询标签持有者的标签，包含全局标签和个人标签2类 url 中
  // 第一个参数是 site_id 租户id
  // 第二个参数是userId 用户id
  // 第三个参数是tagGroupName 标签分组,
  // 多个分组之间用~隔开，（设计中用户可以有多个分组，
  // 一个分组可以用于 scrm的营销活动，另一个分组可以用于校务，
  // 这个分组可以由程序写死一个（整个项目只用一组标签的情况下），
  // 可以提高系统的使用） 第四个参数是 标签名称
  findTags ({ rootState, state }, data) {
    const siteId = rootState.app.site_id
    const userId = rootState.app.user.id
    const tagGroupName = 'CUSTOM'
    const tagName = data.tagName

    const uri = '/if/findTags/siteId/' + siteId + '/userId/' + userId + '/tagGroupName/' + tagGroupName + '/tagName/' + tagName
    const url = env.TAG_API_HOST + uri
    return axios.get(url + '?' + U(Object.assign({}, state.app, {tagObjectCode: data.tagObjectCode})))
  },
  // 该接口用于返回标签持有者的标签，包含全局标
  // 签和个人标签2类 url 中第一个参数是 site_id 租户id
  // 第二个参数是userId 用户id 第三个参数是tagGroupName 标签分组,
  // 多个分组之间用~隔开，（设计中用户可以有多个分组，
  // 一个分组可以用于 scrm的营销活动，另一个分组可以用于校务，
  // 这个分组可以由程序写死一个（整个项目只用一组标签的情况下），可以提高系统的使用）
  findAllTags ({ rootState, state }, data) {
    const siteId = rootState.app.site_id
    const userId = rootState.app.user.id
    const tagGroupName = 'CUSTOM'

    const uri = '/if/tags/siteId/' + siteId + '/userId/' + userId + '/tagGroupName/' + tagGroupName
    const url = env.TAG_API_HOST + uri
    return axios.get(url + '?' + U(state.app))
  },
  // 该接口用于查询业务对象上贴有的标签
  findObjectTags ({ rootState, state }, data) {
    const siteId = rootState.app.site_id
    const userId = rootState.app.user.id
    const tagObjectCode = data.tagObjectCode
    const businessId = data.businessId

    const uri = '/if/objectTags/siteId/' + siteId + '/userId/' + userId + '/tagObjectCode/' + tagObjectCode + '/businessId/' + businessId
    const url = env.TAG_API_HOST + uri
    return axios.get(url + '?' + U(Object.assign({}, state.app, {tagObjectCode: data.tagObjectCode})))
  },
  // 本接口用于根据标签查询贴了该标签的业务对象
  queryObjectsByTag ({ rootState, state }, data) {
    const siteId = rootState.app.site_id
    const userId = rootState.app.user.id
    const tagId = data.tagId

    const uri = '/if/tagObjects/siteId/' + siteId + '/userId/' + userId + '/tagId/' + tagId
    const url = env.TAG_API_HOST + uri

    return axios.get(url + '?' + U(Object.assign({}, state.app, {tagObjectCode: data.tagObjectCode})))
  },
  // 此接口用于为业务对象贴标签
  linkTag ({ rootState, state }, data) {
    const body = {
      'businessId': data.businessId,
      'tagId': data.tagId,
      'tagObjectCode': data.tagObjectCode,
      'userId': rootState.app.user.id
    }
    const params = {
      'app': state.app,
      'body': body,
      'trace': { requestId: getRequestId() }
    }
    const url = env.TAG_API_HOST + '/if/linkTag'
    return axios.post(url, JSON.stringify(params), {
      headers: {
        'Content-Type': 'application/json;charset=UTF-8'
      }})
  },
  // 该接口用于取消已贴上的标签
  unlinkTag ({ rootState, state }, data) {
    const body = {
      'tagObjectId': data.tagObjectId,
      'userId': rootState.app.user.id
    }
    const params = {
      'app': state.app,
      'body': body,
      'trace': { requestId: getRequestId() }
    }
    const url = env.TAG_API_HOST + '/if/unlinkTag/' + data.tagObjectId + '?' + U(state.app)
    return axios.delete(url, {
      data: JSON.stringify(params),
      headers: {
        'Content-Type': 'application/json;charset=UTF-8'
      }})
  },
  // 本接口用于添加个人标签
  tag ({ rootState, state }, data) {
    const body = {
      'tagGroupName': 'CUSTOM',
      'tagName': data.tagName,
      'userId': rootState.app.user.id
    }
    const params = {
      'app': state.app,
      'body': body,
      'trace': { requestId: getRequestId() }
    }
    const url = env.TAG_API_HOST + '/if/tag'
    return axios.post(url, JSON.stringify(params), {
      headers: {
        'Content-Type': 'application/json;charset=UTF-8'
      }}
    )
  },
  // 标签签名获取
  tagSign ({rootState, state, commit}) {
    const url = env.CRM_API_HOST + '/tag_sign'
    return Q.Promise((resolve, reject) => {
      axios.get(url + '?' + U({site_id: rootState.app.site_id}))
        .then((response) => {
          if (response.data.errcode === 0) {
            const results = response.data.results
            const dao = { siteId: results.site_id }
            delete results.site_id
            commit('UPDATE_SIGN', Object.assign(dao, results))
            resolve()
          } else {
            reject(response.data)
          }
        }).catch(() => {
          reject({
            errcode: 10004,
            errmsg: '系统异常'
          })
        })
    })
  }
}
